///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*	Contains preprocessor stuff. This should be the first included header.
*	\file		LaborPreprocessor.h
*	\author		Pierre Terdiman
*	\date		April, 4, 2000
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __LABORPREPROCESSOR_H__
#define __LABORPREPROCESSOR_H__
#include "../LaborCoreDef.h"
NAMESPACE_LABOR3D_BEGIN
// Check compiler options. If this file is included in user-apps, this
// shouldn't be needed, so that they can use what they like best.
#ifndef ICE_DONT_CHECK_COMPILER_OPTIONS
#ifdef COMPILER_VISUAL_CPP
#if defined(_CHAR_UNSIGNED)
#endif

#if defined(_CPPRTTI)
#error Please disable RTTI...
#endif

#if defined(_CPPUNWIND)
#error Please disable exceptions...
#endif

#if defined(_MT)
// Multithreading
#endif
#endif
#endif

// Check debug mode
#ifdef	DEBUG			// May be defined instead of _DEBUG. Let's fix it.
#ifndef	_DEBUG
#define _DEBUG
#endif
#endif

#ifdef  _DEBUG
// Here you may define items for debug builds
#endif

#ifndef THIS_FILE
#define THIS_FILE			__FILE__
#endif

#ifndef ICE_NO_DLL
#ifdef ICECORE_EXPORTS
#define ICECORE_API			__declspec(dllexport)
#else
#define ICECORE_API			__declspec(dllimport)
#endif
#else
#define ICECORE_API
#endif

// Don't override new/delete
//	#define DEFAULT_NEWDELETE
#define DONT_TRACK_MEMORY_LEAKS

#define FUNCTION				extern "C"

// Cosmetic stuff [mainly useful with multiple inheritance]
#define	override(base_class)	virtual

// Down the hatch
#ifdef _MSC_VER
#pragma inline_depth( 255 )
#endif

#ifdef COMPILER_VISUAL_CPP
#pragma intrinsic(memcmp)
#pragma intrinsic(memcpy)
#pragma intrinsic(memset)
#pragma intrinsic(strcat)
#pragma intrinsic(strcmp)
#pragma intrinsic(strcpy)
#pragma intrinsic(strlen)
#pragma intrinsic(abs)
#pragma intrinsic(labs)
#endif

// ANSI compliance
#ifdef  _DEBUG
// Remove painful warning in debug
inline bool __False__(){ return false; }
#define for if(__False__()){}	else for
#else
#define for if(0){}	else for
#endif

NAMESPACE_LABOR3D_END

#endif // __LABORPREPROCESSOR_H__
